﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LiquidacionComision.AgenteService;
using LiquidacionComision.CategoriaService;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

namespace LiquidacionComision.Controllers
{
    [HandleError]
    public class AgenteController : Controller
    {
        AgenteService.AgentesClient agenteService = new AgenteService.AgentesClient();
        //CategoriaService.CategoriasClient categoriaService = new CategoriaService.CategoriasClient();
        private string categoriaRESTService = "http://localhost:7446/CategoriasImpl.svc/Categorias";
        JavaScriptSerializer js = new JavaScriptSerializer();

        public ActionResult Index()
        {

            //Listar agentes
            string ruc = (Request.QueryString["busRuc"] == null) ? string.Empty : Request.QueryString["busRuc"];
            string nombre = (Request.QueryString["busNombre"] == null) ? string.Empty : Request.QueryString["busNombre"];
            string url = string.Empty;

            List<Agente> lstAgentes = agenteService.listarAgente(ruc, nombre).ToList<Agente>();
            ICollection<SelectListItem> Agentes = new List<SelectListItem>();

            foreach (Agente cat in lstAgentes)
            {
                try
                {
                    Agentes.Add(new SelectListItem()
                    {
                        Text = cat.Nombre,
                        Value = cat.Codigo
                    });
                }
                catch
                {
                }
            }
            TempData["Agentes"] = lstAgentes;

            //Listar categorias
            /*List<Categoria> lstCategorias = categoriaService.ListarCategorias(string.Empty, string.Empty).ToList<Categoria>();
            ICollection<SelectListItem> Categorias = new List<SelectListItem>();

            Categorias.Add(new SelectListItem()
            {
                Text = "--SELECCIONE--",
                Value = ""
            });

            foreach (Categoria cat in lstCategorias)
            {
                try
                {
                    Categorias.Add(new SelectListItem()
                    {
                        Text = cat.Nombre,
                        Value = cat.Codigo
                    });
                }
                catch
                {
                }
            }*/

            //Listar categorias
            List<Categoria> lstCategorias = null;
            ICollection<SelectListItem> Categorias = new List<SelectListItem>();

            try
            {
                url = categoriaRESTService + "/ListarTodos";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "GET";
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string objetoJson = reader.ReadToEnd();
                lstCategorias = js.Deserialize<List<Categoria>>(objetoJson);
                //Response.Write(objetoJson);

                Categorias.Add(new SelectListItem()
                {
                    Text = "--SELECCIONE--",
                    Value = ""
                });

                foreach (Categoria cat in lstCategorias)
                {
                    try
                    {
                        Categorias.Add(new SelectListItem()
                        {
                            Text = cat.Codigo + " - " +cat.Nombre,
                            Value = cat.Codigo
                        });
                    }
                    catch
                    {
                    }
                }

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message.ToString() + " : <br />" + categoriaRESTService);
            }

            TempData["Categorias"] = Categorias;
            return View();
        }

        public ActionResult CrearAgente(FormCollection formCollection)
        {
            string codigo = string.Empty;
            codigo = agenteService.crearAgente().Codigo;
            Response.Write(codigo);
            return null;
        }

        public ActionResult EliminarAgente(FormCollection formCollection)
        {
            string codigo = (formCollection["codigo"] == null) ? string.Empty : formCollection["codigo"];
            string resultado = agenteService.eliminarAgente(codigo);            
            Response.Write(resultado);
            return null;
        }

        public ActionResult ObtenerAgente(FormCollection formCollection)
        {
            string codigo = (formCollection["codigo"] == null) ? string.Empty : formCollection["codigo"];
            Agente agente = agenteService.obtenerAgente(codigo);
            string xml = agente.Codigo + ",,," + agente.Nombre + ",,," + agente.Ruc + ",,," + agente.Telefono + ",,," + agente.Mail + ",,," + agente.Categoria;
            Response.Write(xml);
            return null;
        }

        public ActionResult RegistrarAgente()
        {
            string codigo = (Request.QueryString["codigo"] == null) ? string.Empty : Request.QueryString["codigo"];
            string nombre = (Request.QueryString["nombre"] == null) ? string.Empty : Request.QueryString["nombre"];
            string ruc = (Request.QueryString["ruc"] == null) ? string.Empty : Request.QueryString["ruc"];
            string telefono = (Request.QueryString["telefono"] == null) ? string.Empty : Request.QueryString["telefono"];
            string correo = (Request.QueryString["correo"] == null) ? string.Empty : Request.QueryString["correo"];
            string categoria = (Request.QueryString["categoria"] == null) ? string.Empty : Request.QueryString["categoria"];
            string resultado = string.Empty;
            
            try
            {
                AgenteService.Agente agente = new AgenteService.Agente();
                agente.Codigo = codigo;
                agente.Nombre = nombre;
                agente.Ruc = ruc;
                agente.Telefono = telefono;
                agente.Mail = correo;
                agente.Categoria = categoria;

                resultado = agenteService.registrarAgente(agente);
            }
            catch (Exception ex) {
                resultado = ex.Message.ToString();
            }
            Response.Write(resultado);
            return null;
        }

        public ActionResult ModificarAgente()
        {
            string codigo = (Request.QueryString["codigo"] == null) ? string.Empty : Request.QueryString["codigo"];
            string nombre = (Request.QueryString["nombre"] == null) ? string.Empty : Request.QueryString["nombre"];
            string ruc = (Request.QueryString["ruc"] == null) ? string.Empty : Request.QueryString["ruc"];
            string telefono = (Request.QueryString["telefono"] == null) ? string.Empty : Request.QueryString["telefono"];
            string correo = (Request.QueryString["correo"] == null) ? string.Empty : Request.QueryString["correo"];
            string categoria = (Request.QueryString["categoria"] == null) ? string.Empty : Request.QueryString["categoria"];
            string resultado = string.Empty;

            try
            {
                AgenteService.Agente agente = new AgenteService.Agente();
                agente.Codigo = codigo;
                agente.Nombre = nombre;
                agente.Ruc = ruc;
                agente.Telefono = telefono;
                agente.Mail = correo;
                agente.Categoria = categoria;

                resultado = agenteService.modificarAgente(agente);
            }
            catch (Exception ex)
            {
                resultado = ex.Message.ToString();
            }
            Response.Write(resultado);
            return null;
        }

        public ActionResult About()
        {
            return View();
        }
    }
}
